package com.telit.android.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.telit.android.dto.*;
import com.telit.common.dto.NormalTaskDTO;
import com.telit.common.entity.AppTask;
import com.telit.common.entity.PageData;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


/**
 * <p>
 * 任务表 服务类
 * </p>
 *
 * @author yummy
 * @since 2021-07-22
 */
public interface IAppTaskService extends IService<AppTask> {

    /**
     * 查询任务表分页数据
     *
     * @param page      页码
     * @param pageCount 每页条数
     * @return IPage<AppTask>
     */
    IPage<AppTask> findListByPage(AppTask appTask,Integer page, Integer pageCount);

    List<AppTask> searchNoPage(AppTask appTask);

    /**
     * 添加任务表
     *
     * @param appTask 任务表
     * @return int
     */
    Long addHotportTrackTask(HotportTrackTaskDto appTask) throws Exception;

    /**
     * 删除任务表
     *
     * @param id 主键
     * @return int
     */
    int delete(Integer id);

    /**
     * 批量删除任务表
     *
     * @param ids 主键
     * @return int[]

     */
    List<Integer> deleteBatch(Integer[] id);

    /**
     * 修改任务表
     *
     * @param appTask 任务表
     * @return int
     */
    int updateData(AppTask appTask);

    /**
     * id查询数据
     *
     * @param id id
     * @return AppTask
     */
    AppTask findById(Long id);

    Long addHotportUavTask(HotportUavTaskDto hotportUavTaskDto) throws Exception;

    Long addOtherTask(OtherTaskDto otherTaskDto) throws Exception;

    void executeTask(ExecuteTaskDto executeTaskDto);

    void finishTask(FinishTaskDto finishTaskDto);

    /**
     * 日常任务完成
     * @param finishTaskDto
     */
    void normalTaskFinishTask(FinishTaskDto finishTaskDto);

    /**
     * 根据任务类型查询巡护任务
     * @param taskType
     * @param page
     * @param rows
     * @return
     */
    PageData<Object> searchTask(Integer taskType, Integer page, Integer rows);

    /**
     * 根据条件查询总任务状况
     *
     * @return
     */
    PageData<List<AppTask>> queryTotalTaskByCondition(Integer page, Integer rows, AppTaskQueryDTO appTaskQueryDTO);

    /**
     * 根据任务id查询明细
     * @param page
     * @param rows
     * @param taskId
     * @return
     */
    PageData<Object> queryTaskDetailByTaskId(Integer page, Integer rows, Long taskId);

    /**
     * 根据飞手id查询任务列表
     * @return
     */
    List<AppTrackDTO> listCruiseTaskByUserId(PatrolTaskQueryDTO patrolTaskQueryDTO);

    /**
     * 分页查询巡航任务
     * @param patrolTaskQueryDTO
     * @return
     */
    PageData<Object> listCruiseTaskByPage(Integer current,Integer size,PatrolTaskQueryDTO patrolTaskQueryDTO);

    /**
     * 根据护林员id查询任务列表
     * @return
     */
    List<AppTrackDTO> listPatrolTaskByUserId(PatrolTaskQueryDTO patrolTaskQueryDTO);

    /**
     * 分页查询巡护任务
     * @param current
     * @param size
     * @param patrolTaskQueryDTO
     * @return
     */
    PageData<Object> listPatrolTaskByPage(Integer current,Integer size,PatrolTaskQueryDTO patrolTaskQueryDTO);

    /**
     * 查询具体巡护信息
     * @param userId
     * @param id
     * @return
     */
    AppTrackDTO patrolDetailById(Long userId,Long id);

	/**
     * 根据无人机code查询执行任务
     * @param uavCode
     * @return
     */
    List<AppTask> queryTaskByUavCode(String uavCode);

    /**
     * 查询具体的巡航任务
     * @param userId
     * @param id
     * @return
     */
    AppTrackDTO cruiseTaskDetailById(Long userId,Long id);

    /**
     * 根据无人机code查询任务详情
     * @param uavCode
     * @return
     */
    List<AppTrackDTO> listUavTaskByUavCode(String uavCode);

    /**
     * 开始执行子任务
     * @param subTaskId
     * @param httpServletRequest
     */
    void startExecuteTask(Long subTaskId, HttpServletRequest httpServletRequest);

    /**
     * 结束执行子任务
     * @param subTaskId
     * @param httpServletRequest
     */
    void finishExecuteTask(Long subTaskId, HttpServletRequest httpServletRequest);

    /**
     * 未完成的任务详情
     * @param userId
     * @param id
     * @return
     */
    AppTrackDTO unFinishPatrolDetailById(Long userId,Long id);

    /**
     * 日常巡护/巡航任务下达
     */
    Long startNormalTask(NormalTaskDTO normalTaskDTO);

	/**
     * 根据火情id查询巡护任务数量
     * @param fireId
     * @return
     */
    FireTaskNumberDTO queryPatrolTaskNumByFireId(Long fireId);

    /**
     * 根据火情id查询任务列表
     * @param fireId
     * @param type
     * @param page
     * @param rows
     * @return
     */
    PageData<Object> queryPatrolTaskByFireId(Long fireId,String status, Integer type, Integer page, Integer rows);

    /**
     * 查询单个护林员任务信息
     *
     * @return
     */
    PageData<List<AppTask>> querySimplePersonTotalTaskByCondition(Integer page, Integer rows,
                                                                  AppTaskQueryDTO appTaskQueryDTO);

    /**
     * 查询巡航巡护任务某种状态的总和
     *
     * @return
     */
    int selectCountByTypeAndStatus(String taskType, List<String> statusList, Long userId);

    int selectCountByTypeAndStatus1(String taskType, List<String> statusList, List<Long> userIdList);

    void updateAppTaskByParam(AppTask appTask);

}
